StupidBeauty
Read times:1004Posted at:Wed Feb 19 04:33:08 2014
- no title specified

Jwt3.3.0文档翻译:类WSortFilterProxyModel,Class WSortFilterProxyModel

这是一个可与Wt 的条目模型配套使用的代理模型,它提供了过滤和/或排序功能

这个代理模型自身不会存储数据,而是在将某些行过滤掉之后 ,呈现出来自于某个源模型的数据。 它还允许在并不实际改变源模型的情况下对源模型中的数据进行排序。在以下情况下 ,这一点是狠方便的:源模型不支持排序 (也就是说 ,没有重写 WAbstractItemModel#sort() ) ;或者 ,妳不想改变底层模型中数据的实际顺序 ,因为那会引起所有关联到该模型上的视图中的显示结果

要想使用代理模型来过滤数据的话 ,妳需要使用 setFilterKeyColumn() setFilterRegExp() setFilterRole() 方法来指定一个基于单列数据的值的过滤操作。如果妳还是不满意这种过滤机制中的限制的话 ,那么 ,妳可以重写 filterAcceptRow() 方法 ,以提供特殊的过滤方式。

排序功能是通过重写标准的 WAbstractItemModel#sort() 方法来实现的 。通过这种方式 ,一个视图类(例如 WTreeView ),可以在用户的操作下对模型进行重新排序。使用 setSortRole() 来指定要针对何种数据角色进行排序操作,或者 ,重写 lessThan() 方法以提供一种特殊的排序方式。

默认情况下 ,该代理不会在源模型发生改变的情况下自动重新过滤及重新排序。对于源模型的数据变更或者数据行的增加事件不会自动反映到代理模型中 ,但是,为了维护完整性 ,对于源模型中数据行的删除事件一直都会反映到代理模型中 。妳可以使用 setDynamicSortFilter() 来使得该模型在底层模型发生改变时便一定重新过滤及重新排序

使用示例:

// model是源模型

WAbstractItemModel model = ...

// 我们设置好一个代理 ,用于过滤源模型

WSortFilterProxyModel proxy = new WSortFilterProxyModel(this);

proxy.setSourceModel(model);

proxy.setDynamicSortFilter(true);

proxy.setFilterKeyColumn(0);

proxy.setFilterRole(ItemDataRole.UserRole);

proxy.setFilterRegExp(".*");

// 配置一个视图,让它使用代理模型,而不是源模型

WTreeView view = new WTreeView(this);

view.setModel(proxy);

...

重庆六君子:雷政富,韩树明,范文明,罗广,粟志光,彭智勇

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands